package com.gaogzhen.algorithms4.foundation;

/**
 * union-find算法功能接口
 */
public interface UnionFind {

    /**
     * 查找触点p所在分量标志
     * @param p 触点p
     * @return 分量标志
     */
    int find(int p);

    /**
     * 触点p和触点q是否在同一分量内
     * @param p 触点p
     * @param q 触点q
     * @return {@code true}如果触点{@code p}和触点{@code q}在同一分量内；{@code false}否则
     */
    boolean connected(int p, int q);

    /**
     * 合并触点p和触点q
     * @param p 触点q
     * @param q 触点q
     */
    void union(int p, int q);


    /**
     * 分量数量
     * @return 分量数量
     */
    int count();
}
